package presentation;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;

import metier.AnneeMetier;
import metier.EmplacementMetier;
import metier.IndicateurCalculeMetier;
import metier.IndicateurMetier;
import metier.RegionMetier;
import metier.ThemeMetier;
import metier.ValeurMetier;
import modele.Administrateur;
import modele.Annee;
import modele.Emplacement;
import modele.Indicateur;
import modele.Indicateur_calcule;
import modele.Indicateur_qualitatif;
import modele.Region;
import modele.Theme;
import modele.Valeur;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class IndicateurCalculeAction extends ActionSupport {

	private static final long serialVersionUID = 7608206044887440915L;

	public long identifiant;
	private String libelle;
	private int annee;
	private Theme tem;
	private long idemplacement;
	private String valeur;
	private String emplacement;
	private Administrateur administrateur;
	private String niveau_base;
	private Boolean type;
	private ArrayList<Indicateur_calcule> listeIndicateursCalcule;
	private ArrayList<Indicateur_qualitatif> listeIndicateursQualitatif;
	private long identifiantTheme;
	private List<Emplacement> listeEmplacments;
	private Valeur val;
	private List<Valeur> listeValeurs;
	private List<Valeur> listeValeursQualitatif;
	private long identifiantIndicateur;
	private long identifiantEmplacement;
	private Annee a;

	public String listeIndicateursCalcule() {

		// long idAdmin = (long) ServletActionContext.getRequest().getSession()
		// .getAttribute("identifiant");

		listeIndicateursCalcule = (ArrayList<Indicateur_calcule>) IndicateurCalculeMetier
				.getListeIndicateursTheme(identifiantTheme);
		
		ServletActionContext
				.getRequest()
				.getSession()
				.setAttribute("derniereListeIndicCalcule",
						listeIndicateursCalcule);
		System.out.println("mazrara999999");

		return SUCCESS;

	}
	
	
	public List<Valeur> getListeValeursQualitatif() {
		return listeValeursQualitatif;
	}


	public void setListeValeursQualitatif(List<Valeur> listeValeursQualitatif) {
		this.listeValeursQualitatif = listeValeursQualitatif;
	}


	public String listeValeurIndicateurCalcule() {

		// long idAdmin = (long) ServletActionContext.getRequest().getSession()
		// .getAttribute("identifiant");
		
		listeValeurs = (ArrayList<Valeur>) IndicateurCalculeMetier
				.getListeValeursIndicateur(identifiantIndicateur);
//		System.out.println("hna anchoufo valeur kifach blanha  ");
//		System.out.println("liste ha ma fiha  : "+ listeValeurs.get(0).getValeur());
	

		ServletActionContext
				.getRequest()
				.getSession()
				.setAttribute("dernierelisteValeurs",
						listeValeurs);

		return SUCCESS;

	}
	public String listeValeurIndicateurQualitatif() {

		 long idAdmin = (long) ServletActionContext.getRequest().getSession()
		 .getAttribute("identifiant");

		listeValeurs = (ArrayList<Valeur>) IndicateurCalculeMetier
				.getListeValeursIndicateur(identifiantIndicateur);
	

		ServletActionContext
				.getRequest()
				.getSession()
				.setAttribute("derniereListeValeursQualitatif",
						listeValeurs);

		return SUCCESS;

	}
	
//	public String listeValeurIndicateurQualitatif() {
//
//		// long idAdmin = (long) ServletActionContext.getRequest().getSession()
//		// .getAttribute("identifiant");
//
//		listeValeurs = (ArrayList<Valeur>) IndicateurCalculeMetier
//				.getListeValeursIndicateur(identifiantIndicateur);
////		System.out.println("hna anchoufo valeur kifach blanha  ");
////		System.out.println("liste ha ma fiha  : "+ listeValeurs.get(0).getValeur());
//	
//
//		ServletActionContext
//				.getRequest()
//				.getSession()
//				.setAttribute("derniereListeIndicCalcule",
//						listeIndicateursCalcule);
//
//		return SUCCESS;
//
//	}
	
	public String modifierIndicateurCalcule() {

		Indicateur_calcule indicateurC = new Indicateur_calcule(libelle,type);
		indicateurC.setIdentifiant(identifiant);
        String f = indicateurC.getLibelle();
		if (IndicateurMetier.modifierIndicateurCalcule(indicateurC)) {
			return listeIndicateursCalcule();
		} else
			return ERROR;

	}
	
	public String listeIndicateursQualitatif() {

		// long idAdmin = (long) ServletActionContext.getRequest().getSession()
		// .getAttribute("identifiant");
		System.out.println("identifiant theme hahouza flaction :"+identifiantTheme);

		listeIndicateursQualitatif = (ArrayList<Indicateur_qualitatif>) IndicateurCalculeMetier
				.getListeIndicateursQualitatifTheme(identifiantTheme);
//		System.out.println("liste ha ma fiha  : identifiant theme "+ listeIndicateursQualitatif.get(0).getTheme().getIdentifiant());
//		System.out.println("liste ha ma fiha  : indicateur "+ listeIndicateursQualitatif.get(0).getLibelle());

		ServletActionContext
				.getRequest()
				.getSession()
				.setAttribute("derniereListeIndicQalitatif",
						listeIndicateursQualitatif);
		System.out.println("mazrara999999");

		return SUCCESS;

	}

	public String getEmplacement() {
		return emplacement;
	}

	public void setEmplacement(String emplacement) {
		this.emplacement = emplacement;
	}

	public String modifierIndicateur() {

		Indicateur_calcule indicateur = new Indicateur_calcule(libelle);

		indicateur.setIdentifiant(identifiant);
		// indicateur.getTheme().getIdentifiant();

		if (IndicateurMetier.modifierIndicateur(indicateur)) {
			return getDerniereListeIndicateur();
		} else
			return ERROR;

	}

	public Valeur getVal() {
		return val;
	}

	public void setVal(Valeur val) {
		this.val = val;
	}

	public String supprimerIndicateur() {
		IndicateurMetier.supprimerIndicateur(identifiant);
		addActionMessage("Indicateur supprime");

		return getDerniereListeIndicateur();
	}

	public String supprimerIndicateurTheme() {
		IndicateurMetier.supprimerIndicateurTheme(identifiant);
		addActionMessage("Indicateur supprime");

		return getDerniereListeIndicateur();
	}

	public String ajouterIndicateurQualitatif() {

		Indicateur_qualitatif indicateur = new Indicateur_qualitatif(libelle,
				"region");
		indicateur.setNiveau_base(niveau_base);
		System.out.println("craaa indic \n");
		Annee an = new Annee();
		an = AnneeMetier.getAnnee(annee);
		System.out.println("crea annaa ha id :"+ an.getIdentifiant()+" \n");

//		Emplacement emp = EmplacementMetier.getEmplacement(idemplacement);
//		System.out.println(" wsel ltheme li lid dialou = "+identifiantTheme+"\n");

Theme th = new Theme();
		th = IndicateurMetier.getTheme(identifiantTheme);
		System.out.println("jab theme id \n"+th.getIdentifiant());

		indicateur.setTheme(th);
		System.out.println("zad theme f indic \n");

		if (IndicateurCalculeMetier.ajouterIndicateurQualitatif(indicateur))
		{
			System.out.println(" ajouta them\n");

			System.out.println("identifiant indicateur"
					+ indicateur.getIdentifiant() + " \n");

//			System.out.println("indicateur : identifiant : "
//					+ indicateur.getIdentifiant() + " annee : id"
//					+ an.getIdentifiant() + "Emplacement : identifiant"
//					+ emp.getIdentifiant() + " Emplacement : nom"
//					+ emp.getNom() + "hadi hia valeur : " + valeur);

//			Valeur vlr = new Valeur(valeur, emp, indicateur, an);
//			vlr.setEmplacement(emp);
//			vlr.setAnnee(an);
//			vlr.setIndicateur(indicateur);
//
//			ValeurMetier.ajouterValeur(vlr);
			//
			// indicateur.setValeur(vlr);
			//
			// IndicateurMetier.modifierIndicateur(indicateur);

			return listeIndicateursQualitatif();
		} else
			return ERROR;

	}
	

	public String ajouterIndicateurCalcule() {

		Indicateur_calcule indicateur = new Indicateur_calcule(libelle,
				niveau_base, type);
		indicateur.setNiveau_base(niveau_base);

		Annee an = new Annee();
		an = AnneeMetier.getAnnee(annee);

		Emplacement emp = EmplacementMetier.getEmplacement(2);

		tem = IndicateurMetier.getTheme(identifiantTheme);

		indicateur.setTheme(tem);

		if (IndicateurCalculeMetier.ajouterIndicateurCalcule(indicateur)) {
			System.out.println("identifiant indicateur"
					+ indicateur.getIdentifiant() + " \n");

			System.out.println("indicateur : identifiant : "
					+ indicateur.getIdentifiant() + " annee : id"
					+ an.getIdentifiant() + "Emplacement : identifiant"
					+ emp.getIdentifiant() + " Emplacement : nom"
					+ emp.getNom() + "hadi hia valeur : " + valeur);

//			Valeur vlr = new Valeur(valeur, emp, indicateur, an);
//			vlr.setEmplacement(emp);
//			vlr.setAnnee(an);
//			vlr.setIndicateur(indicateur);
//
//			ValeurMetier.ajouterValeur(vlr);
			//
			// indicateur.setValeur(vlr);
			//
			// IndicateurMetier.modifierIndicateur(indicateur);

			return listeIndicateursCalcule();
		} else
			return ERROR;

	}
	public String supprimerIndicateurCalcule() {
		IndicateurMetier.supprimerIndicateur(identifiant);
		addActionMessage("Indicateur supprime");

		return listeIndicateursCalcule();
	}
	
	public String supprimerIndicateurQualitatif() {
		IndicateurMetier.supprimerIndicateur(identifiant);
		addActionMessage("Indicateur supprime");

		return listeIndicateursQualitatif();
	}

	public String getEmplacementsOfNiveau() {
		listeEmplacments = new ArrayList<>();

		if ("region".equals(niveau_base)) {
			listeEmplacments = RegionMetier.getListeNomRegions(0);

		}
		if ("province".equals(niveau_base)) {
//			listeEmplacments.add("province1");
//			listeEmplacments.add("province2");
		}
		return SUCCESS;
	}
	
	public String getEmplacementsValeursOfNiveau() {
		listeEmplacments = new ArrayList<>();

		if ("region".equals(niveau_base)) {
			listeEmplacments = RegionMetier.getListeNomRegions(0);

		}
		if ("province".equals(niveau_base)) {
//			listeEmplacments.add("province1");
//			listeEmplacments.add("province2");
		}
		return SUCCESS;
	}
	public String ajouterValeurIndicateurCalcule() {
		Emplacement emp = EmplacementMetier.getEmplacement(idemplacement);
		Annee an = new Annee();
		an = AnneeMetier.getAnnee(annee);
		System.out.println("identifiantEmplacement"+identifiantEmplacement);

		Indicateur_calcule indicateur = IndicateurCalculeMetier.getIndicateurCalcule(identifiantIndicateur);
	

		Valeur vlr = new Valeur(valeur, emp, indicateur, an);
		vlr.setNiveau_base(niveau_base);

		ValeurMetier.ajouterValeur(vlr);
		listeValeurIndicateurCalcule();
		return SUCCESS;
	}
	
	

	// public String getEmplacementsOfNiveau(){
	//
	//

	//
	// if ( "region".equals(niveau_base) ){
	// listeEmplacments = RegionMetier.getListeNomRegions(0);
	// ArrayList<String> lis = new ArrayList<String>();
	// String aaa;
	// for (int i=0; i<16;i++)
	// {
	// aaa = (String) listeEmplacments.get(i).getNom();
	// lis.add(aaa);
	// }
	//
	// }
	// if ( "province".equals(niveau_base) ){
	// // listeEmplacments.add("province1");
	// // listeEmplacments.add("province2");
	// }
	// return SUCCESS;
	// }
	//
	// public String getEmplacementsOfNiveau(){
	// listeEmplacments = new ArrayList<>();
	//
	// listeEmplacments = EmplacementMetier.getListeEmplacements(niveau_base);
	//
	//
	// return SUCCESS;
	// }

	// public String rechercherIndicateur() {
	// HttpSession session = ServletActionContext.getRequest().getSession();
	//
	//
	//
	// session.setAttribute("libelle", libelle);
	//
	//
	// Indicateur indicateur = new Indicateur(libelle);
	// Administrateur admin = new Administrateur();
	// admin.setIdentifiant((long) session.getAttribute("identifiantTheme"));
	// indicateur.setAdministrateur(admin);
	//
	//
	//
	// listeIndicateursCalcule =
	// IndicateurCalculeMetier.rechercherIndicateursCalcule(indicateur);
	//
	// return SUCCESS;
	// }

	public String getDerniereListeIndicateur() {
		HttpSession session = ServletActionContext.getRequest().getSession();
		// listeIndicateursCalcule = (ArrayList<Indicateur_calcule>)
		// session.getAttribute("derniereListeIndicCalcule");
		return SUCCESS;
	}
	
	public String getDerniereListeIndicateurCalcule() {
		HttpSession session = ServletActionContext.getRequest().getSession();
		// listeIndicateursCalcule = (ArrayList<Indicateur_calcule>)
		// session.getAttribute("derniereListeIndicCalcule");
		return SUCCESS;
	}
	public String getDerniereListeIndicateurQualitatif() {
		HttpSession session = ServletActionContext.getRequest().getSession();
//		 listeIndicateursQualitatif = (ArrayList<Indicateur_qualitatif>)
//		 session.getAttribute("derniereListeIndicQualitatif");
		return SUCCESS;
	}
	public String getDerniereListeValeurs() {
		HttpSession session = ServletActionContext.getRequest().getSession();
		 listeValeurs = (ArrayList<Valeur>)
		 session.getAttribute("dernierelisteValeurs");
		return SUCCESS;
	}
	public String getDerniereListeValeursQualitatif() {
		HttpSession session = ServletActionContext.getRequest().getSession();
		 listeValeurs = (ArrayList<Valeur>)
		 session.getAttribute("derniereListeValeursQualitatif");
		return SUCCESS;
	}
	// public String getDerniereListeIndicateur() {
	// HttpSession session = ServletActionContext.getRequest().getSession();
	// if
	// ("listeRecherche".equals(session.getAttribute("derniereListeIndicateur")))
	// return "listeRecherche";
	// else
	// return "listeIndicateurs";
	// }

	public long getIdentifiant() {
		return identifiant;
	}

	public void setIdentifiant(long identifiant) {
		this.identifiant = identifiant;
	}

	public String getLibelle() {
		return libelle;
	}

	public void setLibelle(String libelle) {
		this.libelle = libelle;
	}

	public Administrateur getAdministrateur() {
		return administrateur;
	}

	public void setAdministrateur(Administrateur administrateur) {
		this.administrateur = administrateur;
	}

	public String getNiveau_base() {
		return niveau_base;
	}

	public void setNiveau_base(String niveau_base) {
		this.niveau_base = niveau_base;
	}

	public Annee getA() {
		return a;
	}

	public void setA(Annee a) {
		this.a = a;
	}

	public List<Valeur> getListeValeurs() {
		return listeValeurs;
	}

	public void setListeValeurs(List<Valeur> listeValeurs) {
		this.listeValeurs = listeValeurs;
	}

	public long getIdentifiantIndicateur() {
		return identifiantIndicateur;
	}

	public void setIdentifiantIndicateur(long identifiantIndicateur) {
		this.identifiantIndicateur = identifiantIndicateur;
	}

	public Boolean getType() {
		return type;
	}

	public void setType(Boolean type) {
		this.type = type;
	}

	public ArrayList<Indicateur_calcule> getListeIndicateursCalcule() {
		return listeIndicateursCalcule;
	}

	public void setListeIndicateursCalcule(
			ArrayList<Indicateur_calcule> listeIndicateursCalcule) {
		this.listeIndicateursCalcule = listeIndicateursCalcule;
	}

	public long getIdentifiantTheme() {
		return identifiantTheme;
	}

	public void setIdentifiantTheme(long identifiantTheme) {
		this.identifiantTheme = identifiantTheme;
	}

	public Theme getTem() {
		return tem;
	}

	public void setTem(Theme tem) {
		this.tem = tem;
	}

	public int getAnnee() {
		return annee;
	}

	public void setAnnee(int annee) {
		this.annee = annee;
	}

	public long getIdentifiantEmplacement() {
		return identifiantEmplacement;
	}

	public void setIdentifiantEmplacement(long identifiantEmplacement) {
		this.identifiantEmplacement = identifiantEmplacement;
	}

	public long getIdemplacement() {
		return idemplacement;
	}

	public void setIdemplacement(long idemplacement) {
		this.idemplacement = idemplacement;
	}

	public String getValeur() {
		return valeur;
	}

	public void setValeur(String valeur) {
		this.valeur = valeur;
	}

	public ArrayList<Indicateur_qualitatif> getListeIndicateursQualitatif() {
		return listeIndicateursQualitatif;
	}



	public void setListeIndicateursQualitatif(
			ArrayList<Indicateur_qualitatif> listeIndicateursQualitatif) {
		this.listeIndicateursQualitatif = listeIndicateursQualitatif;
	}



	public List<Emplacement> getListeEmplacments() {
		return listeEmplacments;
	}

	public void setListeEmplacments(List<Emplacement> listeEmplacments) {
		this.listeEmplacments = listeEmplacments;
	}

}
